package semiProject_army.mvc.beans;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import semiProject_army.mvc.connection.ConnectionProvider;
import semiProject_army.mvc.connection.JDBCManager;

// 회원 테이블에 접근하여 요청을 처리하는 DAO(Data Access Object) 클래스
public class MemberDAO {
	
	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;
	
	private static MemberDAO instance = new MemberDAO();
	
	private MemberDAO() { }
	
	public static MemberDAO getInstance() {
		return instance;
	}
	
	
	// 회원 가입을 처리하는 메소드
		public int joinMember(MemberBean member) {
			
			int result = 0;
			
			String joinSql = "INSERT INTO members(userId, userPw, userName, userPhon, userEmail) VALUES(?, ?, ?, ?, ?);";
			
			try {
				// ConnectionProvider을 이용해 DBCP로 부터 Connection을 대여한다.
				conn = ConnectionProvider.getConnection();
				
				pstmt = conn.prepareStatement(joinSql);
				
				// joinSql 쿼리의 플레이스홀더(?)에 대응하는 데이터를 설정한다.
				pstmt.setString(1, member.getUserId());				
				pstmt.setString(2, member.getUserPw());
				pstmt.setString(3, member.getUserName());
				pstmt.setString(4, member.getUserPhon());
				pstmt.setString(5, member.getUserEmail());
				// DB에 쿼리를 전송하여 회원 가입을 완료한다.
				result = pstmt.executeUpdate();
				
			} catch(Exception e) {
				
				e.printStackTrace();
				
			} finally {
				
				// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
				JDBCManager.close(pstmt, conn);
			}
			
			return result;
		}
	
	
	
	/*
	// 회원 로그인을 처리하는 메소드
	public int checkMember(String userId, String userPw) {
		
		String loginSql = "SELECT count(*) as cnt FROM member WHERE  userId = ? and userPw = ?;";
		
		int result = -1;
		
		try {
			// ConnectionProvider을 이용해 DBCP로 부터 Connection을 대여한다.
			conn = ConnectionProvider.getConnection();
			
			pstmt = conn.prepareStatement(loginSql);
			
			// loginSql 쿼리의 플레이스홀더(?)에 대응하는 데이터를 설정한다.
			pstmt.setString(1, userId);
			pstmt.setString(2, userPw);
			
			// DB에 쿼리를 전송하여 결과를 ResultSet으로 받는다.
			rs = pstmt.executeQuery();
			
			 ResultSet에 데이터가 존재하지 않으면 가입된 회원이 아니므로 -1을 리턴
			 * 회원 id는 Primary Key로 중복되지 않기 때문에 회원 테이블에서 SELECT한
			 * 결과가 단일 행으로 리턴 되므로 if문을 사용해 rs.next()를 호출함
			 *
			if(rs.next()) {	
				
				result = rs.getInt("cnt");
				
			} 
//			System.out.println("result값은 : "+result);
		} catch(Exception e) {		
			
			e.printStackTrace();
			
		} finally {
			
			// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
			JDBCManager.close(rs, pstmt, conn);
		}
		
		return result;
	}
	
//아이디 중복체크
public int checkid(String id) {
		
		String loginSql = "SELECT count(userId) FROM member WHERE userId = ?;";
		
		int result = 0;
		
		try {
			// ConnectionProvider을 이용해 DBCP로 부터 Connection을 대여한다.
			conn = ConnectionProvider.getConnection();
			
			pstmt = conn.prepareStatement(loginSql);
			
			// loginSql 쿼리의 플레이스홀더(?)에 대응하는 데이터를 설정한다.
			pstmt.setString(1, id);
			
			// DB에 쿼리를 전송하여 결과를 ResultSet으로 받는다.
			rs = pstmt.executeQuery();
			
			 ResultSet에 데이터가 존재하지 않으면 가입된 회원이 아니므로 -1을 리턴
			 * 회원 id는 Primary Key로 중복되지 않기 때문에 회원 테이블에서 SELECT한
			 * 결과가 단일 행으로 리턴 되므로 if문을 사용해 rs.next()를 호출함
			 *
			if(! rs.next()) {	
				
				return result;
				
			} 
			
		} catch(Exception e) {		
			
			e.printStackTrace();
			
		} finally {
			
			// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
			JDBCManager.close(rs, pstmt, conn);
		}
		
		return result;
	}
	
	
	
	// 중복 회원을 체크하는 메소드
	public boolean overlapIdCheck(String id) {
		
		String overlapSql = "SELECT id FROM member Where id = ?;";		
		boolean result = false;
		
		try{
			// ConnectionProvider을 이용해 DBCP로 부터 Connection을 대여한다.
			conn = ConnectionProvider.getConnection();
			
			pstmt = conn.prepareStatement(overlapSql);
			
			// overlapSql 쿼리의 플레이스홀더(?)에 대응하는 데이터를 설정한다.
			pstmt.setString(1, id);
			
			// DB에 쿼리를 전송하여 결과를 ResultSet으로 받는다.
			rs = pstmt.executeQuery();
			
			 회원 가입 폼에서 입력된 id를 회원 테이블에서 SELECT 하여 ResultSet에
			 * 데이터가 존재하면 이미 가입된 회원 아이디이므로 true를 리턴 한다.
			 *
			if(rs.next()) {
				result = true;
			}
			
			System.out.println("overlapIdCheck(String id)");
			
		} catch(Exception e) {
			
			e.printStackTrace();
			
		} finally{
			
			// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
			JDBCManager.close(rs, pstmt, conn);
		}
		
		return result;
	}


	// 마이페이지 , 띄워주는 
		public MemberBean myPage(String userId) {
			
			String loginSql = "SELECT * FROM member WHERE  userId = ?";
			
			MemberBean mypage = new MemberBean();
			
			try {
				// ConnectionProvider을 이용해 DBCP로 부터 Connection을 대여한다.
				conn = ConnectionProvider.getConnection();
				
				pstmt = conn.prepareStatement(loginSql);
				
				// loginSql 쿼리의 플레이스홀더(?)에 대응하는 데이터를 설정한다.
				pstmt.setString(1, userId);
				
				// DB에 쿼리를 전송하여 결과를 ResultSet으로 받는다.
				rs = pstmt.executeQuery();
				
				 ResultSet에 데이터가 존재하지 않으면 가입된 회원이 아니므로 -1을 리턴
				 * 회원 id는 Primary Key로 중복되지 않기 때문에 회원 테이블에서 SELECT한
				 * 결과가 단일 행으로 리턴 되므로 if문을 사용해 rs.next()를 호출함
				 *
				if(rs.next()) {	
					
					mypage.setUserId(rs.getString("userId"));
					mypage.setUserNo(rs.getInt("userNo"));
					mypage.setUserName(rs.getString("userName"));
					mypage.setUserPw(rs.getString("userPw"));
					mypage.setUserEmail(rs.getString("userEmail"));
					mypage.setUserPhone(rs.getString("userPhone"));
					mypage.setRegDate(rs.getString("regDate"));
					mypage.setUserAddr(rs.getString("userAddr"));
					mypage.setPostNum1(rs.getInt("postNum1"));
										
					
				} 
//				System.out.println("result값은 : "+result);
			} catch(Exception e) {		
				
				e.printStackTrace();
				
			} finally {
				
				// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
				JDBCManager.close(rs, pstmt, conn);
			}
			
			return mypage;
		}
		
		
		
	public int myPageModify(MemberBean modify) {
		
			
			String loginSql = "UPDATE member SET userName=?, userId=?, userPw=?, postNum1=?,userAddr=?,userEmail=?, userPhone=? WHERE userNo=?";
			int result = 0;
		
			
			try{
				conn = ConnectionProvider.getConnection();
				pstmt = conn.prepareStatement(loginSql);
				
				pstmt.setString(1, modify.getUserName());
				pstmt.setString(2, modify.getUserId());
				pstmt.setString(3, modify.getUserPw());
				pstmt.setInt(4, modify.getPostNum1());
				pstmt.setString(5, modify.getUserAddr());
				pstmt.setString(6, modify.getUserEmail());
				pstmt.setString(7, modify.getUserPhone());
				pstmt.setInt(8, modify.getUserNo());
				result = pstmt.executeUpdate();
				
				
				 DB에 쿼리를 발행하여 한 페이지에 보여줄 
				 * 게시글 리스트를 ResultSet으로 받는다.
				 *
				
			} catch(Exception e) {	
				
				e.printStackTrace();
				
			} finally {
				
				// JDBCManager를 이용해 DB 작업에 사용된 자원을 해제 한다.
				JDBCManager.close(rs, pstmt, conn);
			}
			
			return result;
		}
		
		*/
}
